# coding=utf-8

''' 数据库的分析和记录 '''


# 这里是最初的设计方案，最后一个才是项目使用的存储方案

''' 数据保存

all_user  用户信息
    uid
    uname
    data


all_url  保存所有的url
    uid
    uname
    url

stay_url  要爬去的url
    uid
    uname
    url
    
error_url  获取失败的url
    uid
    uname
    url
    
error_data  处理失败的数据
    uid
    uname
    url
    data
    
'''


''' 爬虫流程


          获取爬取的url      
requests <------ stay_url <------
  | |                           |  判断url是否存在  
  | -----------> all_url --------
  | |
  | -----------> all_user  
  |
  -------> error_url | error_data
            

可以先添加一条 stay_url 数据，开始爬虫
如果没有爬虫，等待3秒，再次获取
爬去数据需要使用cookie，可以使用多个账号登录爬去数据

'''

############################# 以下是项目使用的存储方案 ########################################33


'''



# 随机获取一条数据
db.stay_url.aggregate([{$sample:{size:1}}])


mongo --host 192.168.122.188 --port 27017
show dbs
use zhihu
show tables
db.createCollection('error_data')
db.all_url.insert_one({字典})
db.all_url.find()

db.all_url.count()
db.all_url.find_one()

db.all_url.find({'uid':'xxx'})


--------------------------------------------------------------------------
新爬取流程 ： 

                get_url:获取一个url并删除
            ------------>>---- &&(1)&& ------> all_user:存储用户信息
            |                     |  
            |                     |  
            |                     -----------> error_url:错误url
            |                     |  
            |                     -----------> error_date:获取错误用户数据
            |                     |  
            |                     ----------> follow_url:用户的关注的信息
            |                                     |
            |                                     ----> error_follow:错误url
            |                                     |
    --------------                                |
    |  stay_url  |                                |      
    ------------------                            |          
    |  all_url       |                            |          
    ------------------                            |  
            |                                     |  
            ---<---------<-------&&(2)&&  <<------|
                set_url:存储新的url

爬虫程序：
    &&(1)&&  爬取用户信息
    &&(2)&&  爬取关注和被关注的用户

爬取流程：    
    1. 先在all_url中添加一条数据
    2. 爬虫程序 get_url 获取需要爬取的url
    3. 请求获取数据,将获取的用户数据保存在 all_user，将关注和被关注的此用户保存在 follow_url
        如果出现异常根据情况保存错误信息
        error_url  /  error_data
    4. 另一个爬虫程序等在 follow_url的数据
    5. 获取关注用户的基本信息，发送到 all_url中添加新的
    6. 重复 2~5的步骤
        
    














'''